<!DOCTYPE html>
<html>
<head><title>JS跨域下载文件并重命名</title>
    <meta charset="utf-8"/>
    <script>
        /**
         * 获取 blob
         * @param  {String} url 目标文件地址
         * @return {Promise}
         */
        function getBlob(url) {
            return new Promise(resolve => {
                const xhr = new XMLHttpRequest();

                xhr.open('GET', url, true);
                xhr.responseType = 'blob';
                xhr.onload = () => {
                    if (xhr.status === 200) {
                        resolve(xhr.response);
                    }
                };

                xhr.send();
            });
        }

        /**
         * 保存
         * @param  {Blob} blob
         * @param  {String} filename 想要保存的文件名称
         */
        function saveAs(blob, filename) {
            if (window.navigator.msSaveOrOpenBlob) {
                navigator.msSaveBlob(blob, filename);
            } else {
                const link = document.createElement('a');
                const body = document.querySelector('body');

                link.href = window.URL.createObjectURL(blob);
                link.download = filename;

                // fix Firefox
                link.style.display = 'none';
                body.appendChild(link);

                link.click();
                body.removeChild(link);

                window.URL.revokeObjectURL(link.href);
            }
        }

        /**
         * 下载
         * @param  {String} url 目标文件地址
         * @param  {String} filename 想要保存的文件名称
         */
        function download(url, filename) {
            getBlob(url).then(blob => {
                saveAs(blob, filename);
            });
        }

        function d() {
            download('http://file.sxycy.cn:8888/group1/M00/00/39/wKgBBV8nwiGAFqVyAAEo03Gx2w0653.png', 'niubi.png');
        }
    </script>
</head>
<body>

<a href="javascript:" onclick="d()">JS代码跨域</a><br/>
<a href="http://file.sxycy.cn:8888/group1/M00/00/02/wKgBCl9HGW6AH8sBAAD1A7wlc6g012.zip" donwload="niu.zip">A标签原始下载,不能跨域</a>
</body>
</html>